μλ°μ€ν¬λ¦½νΈμ μ€λ‘νλ§κ³Ό λλ°μ΄μ±μ μ°¨μ΄μ μ λ°°μ°κ³ , μ΄λ²€νΈ μ²λ¦¬ μ΅μ ν λ° μΉ μ ν리μΌμ΄μ μ±λ₯ ν₯μμ μν νμ κΈ°μ μ μ΅λνμΈμ. μ€μ μμ μ μ¬μ© μ¬λ‘λ₯Ό μ΄ν΄λ³΄μΈμ.
JavaScript μ€λ‘νλ§ vs λλ°μ΄μ±: μ΄λ²€νΈ μλ μ ν μ λ΅
νλ μΉ κ°λ°μμ μ΄λ²€νΈλ₯Ό ν¨μ¨μ μΌλ‘ μ²λ¦¬νλ κ²μ λ°μμ±μ΄ λ°μ΄λκ³ μ±λ₯μ΄ μ’μ μ ν리μΌμ΄μ μ λ§λλ λ° λ§€μ° μ€μν©λλ€. μ€ν¬λ‘€λ§, μ°½ ν¬κΈ° μ‘°μ , ν€ λλ₯΄κΈ°, λ§μ°μ€ μ΄λκ³Ό κ°μ μ΄λ²€νΈλ ν¨μλ₯Ό λ°λ³΅μ μΌλ‘ μ€ννμ¬ μ μ¬μ μΌλ‘ μ±λ₯ λ³λͺ© νμκ³Ό μ’μ§ λͺ»ν μ¬μ©μ κ²½νμΌλ‘ μ΄μ΄μ§ μ μμ΅λλ€. μ΄λ₯Ό ν΄κ²°νκΈ° μν΄ JavaScriptλ λ κ°μ§ κ°λ ₯ν κΈ°μ μΈ μ€λ‘νλ§κ³Ό λλ°μ΄μ±μ μ 곡ν©λλ€. μ΄λ€μ μ΄λ²€νΈ νΈλ€λ¬κ° μΌλ§λ μμ£Ό μ€νλλμ§ μ μ΄νμ¬ κ³Όλν 리μμ€ μλΉλ₯Ό λ°©μ§νκ³ μ λ°μ μΈ μ ν리μΌμ΄μ μ±λ₯μ ν₯μμν€λ λ° λμμ΄ λλ μ΄λ²€νΈ μλ μ ν μ λ΅μ λλ€.
λ¬Έμ μ΄ν΄: μ μ΄λμ§ μλ μ΄λ²€νΈ λ°μ
λΌμ΄λΈ κ²μ κΈ°λ₯μ ꡬννλ €λ μλ리μ€λ₯Ό μμν΄ λ³΄μΈμ. μ¬μ©μκ° κ²μ μ λ ₯λμ λ¬Έμλ₯Ό μ λ ₯ν λλ§λ€ μλ²μμ κ²μ κ²°κ³Όλ₯Ό κ°μ Έμ€λ ν¨μλ₯Ό νΈλ¦¬κ±°νλ €κ³ ν©λλ€. μλ μ νμ΄ μμΌλ©΄ μ΄ ν¨μλ ν€ μ λ ₯ ν λ§€λ² νΈμΆλμ΄ λΆνμν μμ²μ λλμΌλ‘ μμ±νκ³ μλ²μ κ³ΌλΆνλ₯Ό μ€ μ μμ΅λλ€. μ€ν¬λ‘€ μ΄λ²€νΈ(μ: μ¬μ©μκ° μλλ‘ μ€ν¬λ‘€ν λ λ λ§μ μ½ν μΈ λ‘λ), ν¬κΈ° μ‘°μ μ΄λ²€νΈ(μ: λ μ΄μμ ν¬κΈ° λ€μ κ³μ°) λ° λ§μ°μ€ μ΄λ μ΄λ²€νΈ(μ: λνν κ·Έλν½ μμ±)μμλ μ μ¬ν λ¬Έμ κ° λ°μν μ μμ΅λλ€.
μλ₯Ό λ€μ΄, λ€μ (λ¨μν) JavaScript μ½λλ₯Ό μ΄ν΄λ³΄μΈμ:
const searchInput = document.getElementById('search-input');
searchInput.addEventListener('keyup', function(event) {
// This function will be called on every keyup event
console.log('Fetching search results for:', event.target.value);
// In a real application, you would make an API call here
// fetchSearchResults(event.target.value);
});
μ΄ μ½λλ λͺ¨λ ν€ μ λ ₯λ§λ€ κ²μ μμ²μ νΈλ¦¬κ±°ν©λλ€. μ€λ‘νλ§κ³Ό λλ°μ΄μ±μ μ΄λ¬ν μ€ν λΉλλ₯Ό μ μ΄νλ ν¨κ³Όμ μΈ μ루μ μ μ 곡ν©λλ€.
μ€λ‘νλ§: μ΄λ²€νΈ μ€ν μλ μ‘°μ
μ€λ‘νλ§μ μ§μ λ μκ° κ°κ²© λ΄μμ ν¨μκ° μ΅λ ν λ²λ§ μ€νλλλ‘ λ³΄μ₯ν©λλ€. ν¨μλ₯Ό νΈλ¦¬κ±°νλ μ΄λ²€νΈκ° λ μμ£Ό λ°μνλλΌλ ν¨μκ° νΈμΆλλ μλλ₯Ό μ νν©λλ€. X λ°λ¦¬μ΄λ§λ€ ν λ²μ μ€νλ§ νμ©νλ λ¬Έμ§κΈ°λΌκ³ μκ°ν΄λ³΄μΈμ. ν΄λΉ κ°κ²© λ΄μ λͺ¨λ νμ νΈλ¦¬κ±°λ κ°κ²©μ΄ λ§λ£λ λκΉμ§ 무μλ©λλ€.
μ€λ‘νλ§ μλ λ°©μ
- μ΄λ²€νΈκ° νΈλ¦¬κ±°λλ©΄ μ€λ‘νλ§λ ν¨μλ νμ©λ μκ° κ°κ²© λ΄μ μλμ§ νμΈν©λλ€.
- κ°κ²©μ΄ μ§λ¬μΌλ©΄ ν¨μκ° μ€νλκ³ κ°κ²©μ μ¬μ€μ ν©λλ€.
- κ°κ²©μ΄ μμ§ νμ± μνμ΄λ©΄ κ°κ²©μ΄ λ§λ£λ λκΉμ§ ν¨μλ 무μλ©λλ€.
μ€λ‘νλ§ κ΅¬ν
λ€μμ JavaScriptμμ μ€λ‘νλ§ ν¨μμ κΈ°λ³Έ ꡬνμ λλ€:
function throttle(func, delay) {
let timeoutId;
let lastExecTime = 0;
return function(...args) {
const context = this;
const currentTime = new Date().getTime();
if (!lastExecTime || (currentTime - lastExecTime >= delay)) {
func.apply(context, args);
lastExecTime = currentTime;
}
};
}
μ€λͺ :
throttleν¨μλ λ κ°μ§ μΈμλ₯Ό λ°μ΅λλ€: μ€λ‘νλ§ν ν¨μ(func)μ λ°λ¦¬μ΄ λ¨μμ μ§μ° μκ°(delay).- μλ³Έ ν¨μμ μ€λ‘νλ§λ λ²μ μΌλ‘ μλνλ μ ν¨μλ₯Ό λ°νν©λλ€.
- λ°νλ ν¨μ λ΄λΆμμ λ§μ§λ§ μ€ν μ΄ν μΆ©λΆν μκ°μ΄ μ§λ¬λμ§ νμΈν©λλ€ (
currentTime - lastExecTime >= delay). - μ§μ° μκ°μ΄ μ§λλ©΄
func.apply(context, args)λ₯Ό μ¬μ©νμ¬ μλ³Έ ν¨μλ₯Ό μ€ννκ³ ,lastExecTimeμ μ λ°μ΄νΈνλ©°, νμ΄λ¨Έλ₯Ό μ¬μ€μ ν©λλ€. - μ§μ° μκ°μ΄ μ§λμ§ μμμΌλ©΄ ν¨μλ 건λλ°μ΄μ§λλ€. λ κ³ κΈ λ²μ μ λ§μ§λ§ νΈμΆμ΄ κ²°κ΅ λ°μνλλ‘ μ§μ° μ€νμ μμ½ν μ μμ§λ§, μ΄κ²μ μ’ μ’ λΆνμν©λλ€.
μ€λ‘νλ§ μμ : μ€ν¬λ‘€ μ΄λ²€νΈ
μ€ν¬λ‘€ μμΉμ λ°λΌ μ§νλ₯ νμμ€μ μ λ°μ΄νΈνλ ν¨μμ λΉλλ₯Ό μ ννκΈ° μν΄ μ€ν¬λ‘€ μ΄λ²€νΈμ μ€λ‘νλ§μ μ μ©ν΄ λ³΄κ² μ΅λλ€:
function updateProgressBar() {
const scrollPosition = window.scrollY;
const documentHeight = document.documentElement.scrollHeight - document.documentElement.clientHeight;
const scrollPercentage = (scrollPosition / documentHeight) * 100;
document.getElementById('progress-bar').style.width = scrollPercentage + '%';
console.log('Scroll percentage:', scrollPercentage);
}
const throttledUpdateProgressBar = throttle(updateProgressBar, 250); // Throttle to 4 times per second
window.addEventListener('scroll', throttledUpdateProgressBar);
μ΄ μμ μμ updateProgressBar ν¨μλ μ€ν¬λ‘€ μ΄λ²€νΈκ° μΌλ§λ μμ£Ό λ°μνλ μκ΄μμ΄ μ΅λ 250λ°λ¦¬μ΄λ§λ€ ν λ²μ© νΈμΆλ©λλ€. μ΄λ κ² νλ©΄ μ§νλ₯ νμμ€μ΄ λ무 λΉ λ₯΄κ² μ
λ°μ΄νΈλμ΄ κ³Όλν 리μμ€λ₯Ό μλΉνλ κ²μ λ°©μ§ν©λλ€.
μ€λ‘νλ§ μ¬μ© μ¬λ‘
- μ€ν¬λ‘€ μ΄λ²€νΈ: λ λ§μ μ½ν μΈ λ₯Ό λ‘λνκ±°λ, UI μμλ₯Ό μ λ°μ΄νΈνκ±°λ, μ€ν¬λ‘€ μμΉμ λ°λΌ κ³μ°μ μννλ ν¨μμ λΉλ μ ν.
- ν¬κΈ° μ‘°μ μ΄λ²€νΈ: μ°½ ν¬κΈ°κ° μ‘°μ λ λ λ μ΄μμ ν¬κΈ°λ₯Ό λ€μ κ³μ°νκ±°λ UI μμλ₯Ό μ‘°μ νλ ν¨μμ μ€ν μ μ΄.
- λ§μ°μ€ μ΄λ μ΄λ²€νΈ: λνν κ·Έλν½ λλ μ λλ©μ΄μ μ μν΄ λ§μ°μ€ μμ§μμ μΆμ νλ ν¨μμ λΉλ μ‘°μ .
- κ²μ κ°λ°: μΌκ΄λ νλ μ μλλ₯Ό μ μ§νκΈ° μν΄ κ²μ 루ν μ λ°μ΄νΈ κ΄λ¦¬.
- API νΈμΆ: ν¨μκ° λ€νΈμν¬ νΈμΆμ νλ μλλ₯Ό μ ννμ¬ κ³Όλν API μμ² λ°©μ§. μλ₯Ό λ€μ΄, GPS μΌμμμ μμΉ λ°μ΄ν°λ₯Ό 5μ΄λ§λ€ κ°μ Έμ€λ κ²μ λ§μ μ ν리μΌμ΄μ μ μΌλ°μ μΌλ‘ μΆ©λΆνλ©°, μ΄λΉ μμ λ² κ°μ Έμ¬ νμλ μμ΅λλ€.
λλ°μ΄μ±: λΉνμ± μνκΉμ§ μ΄λ²€νΈ μ€ν μ§μ°
λλ°μ΄μ±μ μ§μ λ λΉνμ± κΈ°κ°μ΄ κ²½κ³Όν λκΉμ§ ν¨μμ μ€νμ μ§μ°μν΅λλ€. λ§μ§λ§ μ΄λ²€νΈ νΈλ¦¬κ±° ν μΌμ μκ° λμ κΈ°λ€λ¦° λ€μ ν¨μλ₯Ό μ€νν©λλ€. ν΄λΉ μκ° λ΄μ λ€λ₯Έ μ΄λ²€νΈκ° νΈλ¦¬κ±°λλ©΄ νμ΄λ¨Έκ° μ¬μ€μ λκ³ ν¨μκ° λ€μ μ§μ°λ©λλ€. κ²μ κ²°κ³Όλ₯Ό μ μνκΈ° μ μ λκ΅°κ°κ° μ λ ₯μ λ§μΉ λκΉμ§ κΈ°λ€λ¦¬λ κ²μ΄λΌκ³ μκ°νμΈμ.
λλ°μ΄μ± μλ λ°©μ
- μ΄λ²€νΈκ° νΈλ¦¬κ±°λλ©΄ νμ΄λ¨Έκ° μμλ©λλ€.
- νμ΄λ¨Έκ° λ§λ£λκΈ° μ μ λ€λ₯Έ μ΄λ²€νΈκ° νΈλ¦¬κ±°λλ©΄ νμ΄λ¨Έκ° μ¬μ€μ λ©λλ€.
- λ μ΄μ μ΄λ²€νΈκ° νΈλ¦¬κ±°λμ§ μμ μνμμ νμ΄λ¨Έκ° λ§λ£λλ©΄ ν¨μκ° μ€νλ©λλ€.
λλ°μ΄μ± ꡬν
λ€μμ JavaScriptμμ λλ°μ΄μ± ν¨μμ κΈ°λ³Έ ꡬνμ λλ€:
function debounce(func, delay) {
let timeoutId;
return function(...args) {
const context = this;
clearTimeout(timeoutId);
timeoutId = setTimeout(() => {
func.apply(context, args);
}, delay);
};
}
μ€λͺ :
debounceν¨μλ λ κ°μ§ μΈμλ₯Ό λ°μ΅λλ€: λλ°μ΄μ±ν ν¨μ(func)μ λ°λ¦¬μ΄ λ¨μμ μ§μ° μκ°(delay).- μλ³Έ ν¨μμ λλ°μ΄μ±λ λ²μ μΌλ‘ μλνλ μ ν¨μλ₯Ό λ°νν©λλ€.
- λ°νλ ν¨μ λ΄λΆμμ
clearTimeout(timeoutId)λ₯Ό μ¬μ©νμ¬ κΈ°μ‘΄ νμμμμ λͺ¨λ μ§μλλ€. - κ·Έλ° λ€μ μ§μ λ μ§μ° μκ° νμ μλ³Έ ν¨μλ₯Ό μ€νν μ νμμμμ
setTimeoutμ μ¬μ©νμ¬ μ€μ ν©λλ€. - νμμμμ΄ λ§λ£λκΈ° μ μ λ€λ₯Έ μ΄λ²€νΈκ° νΈλ¦¬κ±°λλ©΄
clearTimeoutμ΄ κΈ°μ‘΄ νμμμμ μ·¨μνκ³ μ νμμμμ΄ μ€μ λμ΄ μ¬μ€μ μ§μ° μκ°μ΄ μ¬μ€μ λ©λλ€.
λλ°μ΄μ± μμ : λΌμ΄λΈ κ²μ
κ³Όλν API νΈμΆμ λ°©μ§νκΈ° μν΄ λΌμ΄λΈ κ²μ κΈ°λ₯μ λλ°μ΄μ±μ μ μ©ν΄ λ³΄κ² μ΅λλ€. κ²μ ν¨μλ μ¬μ©μκ° μ§μ λ μκ° λμ μ λ ₯μ μ€λ¨ν νμλ§ μ€νλ©λλ€:
function fetchSearchResults(query) {
console.log('Fetching search results for:', query);
// In a real application, you would make an API call here
// fetch('/api/search?q=' + query)
// .then(response => response.json())
// .then(data => displaySearchResults(data));
}
const debouncedFetchSearchResults = debounce(fetchSearchResults, 300); // Debounce for 300 milliseconds
const searchInput = document.getElementById('search-input');
searchInput.addEventListener('keyup', (event) => {
debouncedFetchSearchResults(event.target.value);
});
μ΄ μμ μμ fetchSearchResults ν¨μλ μ¬μ©μκ° νμ΄νμ λ©μΆ ν 300λ°λ¦¬μ΄ νμλ§ νΈμΆλ©λλ€. μ΄λ κ² νλ©΄ μ ν리μΌμ΄μ
μ΄ λͺ¨λ ν€ μ
λ ₯ νμ API νΈμΆμ νλ κ²μ λ°©μ§νκ³ μλ²μ λΆνλ₯Ό ν¬κ² μ€μ
λλ€. μ¬μ©μκ° λ§€μ° λΉ λ₯΄κ² νμ΄ννλλΌλ μ΅μ’
κ²μ μΏΌλ¦¬λ§ API νΈμΆμ νΈλ¦¬κ±°ν©λλ€.
λλ°μ΄μ± μ¬μ© μ¬λ‘
- λΌμ΄λΈ κ²μ: μ¬μ©μκ° νμ΄νμ λ§μΉ λκΉμ§ κ²μ μμ² μ€ν μ§μ°.
- ν μ€νΈ μ λ ₯ μ ν¨μ± κ²μ¬: λͺ¨λ ν€ μ λ ₯λ§λ€ μ ν¨μ± κ²μ¬λ₯Ό νλ λμ , μ¬μ©μκ° νμ΄νμ λ§μΉ ν μ λ ₯ μ ν¨μ± κ²μ¬.
- μ°½ ν¬κΈ° μ‘°μ : μ¬μ©μκ° μ°½ ν¬κΈ° μ‘°μ μ λ§μΉ ν λ μ΄μμ ν¬κΈ°λ₯Ό λ€μ κ³μ°νκ±°λ UI μμλ₯Ό μ‘°μ .
- λ²νΌ ν΄λ¦: λ²νΌ ν΄λ¦κ³Ό κ΄λ ¨λ ν¨μμ μ€νμ μ§μ°μμΌ μλμΉ μμ μ΄μ€ ν΄λ¦ λ°©μ§.
- μλ μ μ₯: μ¬μ©μκ° νΉμ κΈ°κ° λμ λΉνμ± μνμμ λ λ¬Έμ λ³κ²½ μ¬νμ μλμΌλ‘ μ μ₯. μ΄λ μ¨λΌμΈ νΈμ§κΈ° λ° μλ νλ‘μΈμμμ μμ£Ό μ¬μ©λ©λλ€.
μ€λ‘νλ§ vs. λλ°μ΄μ±: μ£Όμ μ°¨μ΄μ
μ€λ‘νλ§κ³Ό λλ°μ΄μ±μ λͺ¨λ μ΄λ²€νΈ μλ μ ν μ λ΅μ΄μ§λ§, μλ‘ λ€λ₯Έ λͺ©μ μ κ°μ§κ³ μμΌλ©° λ€λ₯Έ μλ리μ€μ κ°μ₯ μ ν©ν©λλ€. μ£Όμ μ°¨μ΄μ μ μμ½ν νλ λ€μκ³Ό κ°μ΅λλ€:
| νΉμ§ | μ€λ‘νλ§ | λλ°μ΄μ± |
|---|---|---|
| λͺ©μ | ν¨μκ° μ€νλλ μλλ₯Ό μ νν©λλ€. | λΉνμ± μνκΉμ§ ν¨μμ μ€νμ μ§μ°ν©λλ€. |
| μ€ν | μ§μ λ μκ° κ°κ²© λ΄μμ ν¨μλ₯Ό μ΅λ ν λ² μ€νν©λλ€. | μ§μ λ λΉνμ± κΈ°κ° νμ ν¨μλ₯Ό μ€νν©λλ€. |
| μ¬μ© μ¬λ‘ | μ€ν¬λ‘€ μ΄λ²€νΈ, ν¬κΈ° μ‘°μ μ΄λ²€νΈ, λ§μ°μ€ μ΄λ μ΄λ²€νΈ, κ²μ κ°λ°, API νΈμΆ. | λΌμ΄λΈ κ²μ, ν μ€νΈ μ λ ₯ μ ν¨μ± κ²μ¬, μ°½ ν¬κΈ° μ‘°μ , λ²νΌ ν΄λ¦, μλ μ μ₯. |
| μ€ν 보μ₯ | (μ§μ λ μλκΉμ§) κ·μΉμ μΈ κ°κ²©μΌλ‘ μ€νμ 보μ₯ν©λλ€. | λΉνμ± μν ν ν λ²λ§ μ€νλλ©°, λ§μ μ΄λ²€νΈλ₯Ό 건λλΈ μ μμ΅λλ€. |
| μ΄κΈ° μ€ν | 첫 λ²μ§Έ μ΄λ²€νΈ λ°μ μ μ¦μ μ€νλ μ μμ΅λλ€. | νμ μ€νμ μ§μ°ν©λλ€. |
μ€λ‘νλ§ μ¬μ© μκΈ°
μ΄λ²€νΈκ° μμ£Ό νΈλ¦¬κ±°λλλΌλ ν¨μκ° μΌμ ν κ°κ²©μΌλ‘ μ€νλλλ‘ ν΄μΌ ν λ μ€λ‘νλ§μ μ¬μ©νμΈμ. μ΄λ μ€ν¬λ‘€λ§, ν¬κΈ° μ‘°μ λλ λ§μ°μ€ μ΄λκ³Ό κ°μ μ°μμ μΈ μ΄λ²€νΈμ λ°λΌ UI μμλ₯Ό μ λ°μ΄νΈνκ±°λ κ³μ°μ μννλ €λ μλ리μ€μ μ μ©ν©λλ€.
μμ: μ¬μ©μμ λ§μ°μ€ μμΉλ₯Ό μΆμ νμ¬ ν΄νμ νμνλ€κ³ μμν΄ λ³΄μΈμ. λ§μ°μ€κ° μ΄λν λλ§λ€ ν΄νμ λͺ¨λ μ λ°μ΄νΈν νμλ μμ΅λλ€. μ΄λΉ λͺ λ² μ λ°μ΄νΈνλ κ²μΌλ‘ μΌλ°μ μΌλ‘ μΆ©λΆν©λλ€. μ€λ‘νλ§μ λΈλΌμ°μ μ κ³ΌλΆνλ₯Ό μ£Όμ§ μκ³ ν΄ν μμΉκ° μ μ ν μλλ‘ μ λ°μ΄νΈλλλ‘ λ³΄μ₯ν©λλ€.
λλ°μ΄μ± μ¬μ© μκΈ°
μ΄λ²€νΈ μμ€κ° μ§μ λ κΈ°κ° λμ μ΄λ²€νΈλ₯Ό νΈλ¦¬κ±°νλ κ²μ λ©μΆ νμλ§ ν¨μλ₯Ό μ€ννλ €λ κ²½μ° λλ°μ΄μ±μ μ¬μ©νμΈμ. μ΄λ μ¬μ©μκ° μ λ ₯ νλμ μνΈ μμ©νκ±°λ μ°½ ν¬κΈ°λ₯Ό μ‘°μ ν ν μμ μ μννλ €λ μλ리μ€μ μ μ©ν©λλ€.
μμ: μ΄λ©μΌ μ£Όμλ₯Ό νμΈνλ μ¨λΌμΈ μμμ μκ°ν΄ 보μΈμ. λͺ¨λ ν€ μ λ ₯ νμ μ΄λ©μΌ μ£Όμλ₯Ό νμΈν νμλ μμ΅λλ€. λμ μ¬μ©μκ° νμ΄νμ λ§μΉ λκΉμ§ κΈ°λ€λ¦° λ€μ μ΄λ©μΌ μ£Όμλ₯Ό νμΈν΄μΌ ν©λλ€. λλ°μ΄μ±μ μ¬μ©μκ° μ§μ λ κΈ°κ° λμ νμ΄νμ λ©μΆ νμλ§ μ ν¨μ± κ²μ¬ ν¨μκ° ν λ² μ€νλλλ‘ λ³΄μ₯ν©λλ€.
κ³ κΈ μ€λ‘νλ§ λ° λλ°μ΄μ± κΈ°μ
μμμ μ 곡λ μ€λ‘νλ§ λ° λλ°μ΄μ±μ κΈ°λ³Έ ꡬνμ λ 볡μ‘ν μλ리μ€λ₯Ό μ²λ¦¬νλλ‘ λμ± ν₯μλ μ μμ΅λλ€.
μ ν λ° νν μ΅μ
μΌλΆ μ€λ‘νλ§ λ° λλ°μ΄μ± ꡬνμ ν¨μκ° μ§μ λ μκ° κ°κ²©μ μμ(μ ν μμ§) λλ λ(νν μμ§)μ μ€νλ μ§ μ¬λΆλ₯Ό μ μ΄νλ μ΅μ μ μ 곡ν©λλ€. μ΄λ€μ μ’ μ’ λΆμΈ νλκ·Έ λλ μ΄κ±°ν κ°μ λλ€.
- μ ν μμ§: μ΄λ²€νΈκ° μ²μ νΈλ¦¬κ±°λ λ ν¨μλ₯Ό μ¦μ μ€ννκ³ , κ·Έ λ€μ μ§μ λ κ°κ²© λ΄μμ μ΅λ ν λ² μ€νν©λλ€.
- νν μμ§: μ΄λ²€νΈκ° κ³μ νΈλ¦¬κ±°λλλΌλ μ§μ λ κ°κ²©μ΄ κ²½κ³Όν νμ ν¨μλ₯Ό μ€νν©λλ€.
μ΄λ¬ν μ΅μ μ νΉμ μꡬ μ¬νμ μΆ©μ‘±νλλ‘ μ€λ‘νλ§ λ° λλ°μ΄μ±μ λμμ λ―ΈμΈ μ‘°μ νλ λ° μ μ©ν μ μμ΅λλ€.
컨ν μ€νΈ λ° μΈμ
μμμ μ 곡λ μ€λ‘νλ§ λ° λλ°μ΄μ± ꡬνμ μ€λ‘νλ§λκ±°λ λλ°μ΄μ±λλ ν¨μμ μλ 컨ν
μ€νΈ(this)μ μΈμλ₯Ό 보쑴ν©λλ€. μ΄λ κ² νλ©΄ ν¨μκ° μ€νλ λ μμλλ‘ μλνλλ‘ λ³΄μ₯ν©λλ€.
κ·Έλ¬λ κ²½μ°μ λ°λΌ 컨ν
μ€νΈλ₯Ό λͺ
μμ μΌλ‘ λ°μΈλ©νκ±°λ ν¨μμ μ λ¬νκΈ° μ μ μΈμλ₯Ό μμ ν΄μΌ ν μλ μμ΅λλ€. μ΄λ ν¨μ κ°μ²΄μ call λλ apply λ©μλλ₯Ό μ¬μ©νμ¬ λ¬μ±ν μ μμ΅λλ€.
λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬
λ§μ JavaScript λΌμ΄λΈλ¬λ¦¬ λ° νλ μμν¬λ μ€λ‘νλ§ λ° λλ°μ΄μ±μ λ΄μ₯ ꡬνμ μ 곡ν©λλ€. μ΄λ¬ν ꡬνμ μμμ μ 곡λ κΈ°λ³Έ ꡬνλ³΄λ€ λ κ°λ ₯νκ³ κΈ°λ₯μ΄ νλΆν κ²½μ°κ° λ§μ΅λλ€. μλ₯Ό λ€μ΄, Lodashλ _.throttle λ° _.debounce ν¨μλ₯Ό μ 곡ν©λλ€.
// Using Lodash's _.throttle
const throttledUpdateProgressBar = _.throttle(updateProgressBar, 250);
// Using Lodash's _.debounce
const debouncedFetchSearchResults = _.debounce(fetchSearchResults, 300);
μ΄λ¬ν λΌμ΄λΈλ¬λ¦¬λ₯Ό μ¬μ©νλ©΄ μ½λλ₯Ό λ¨μννκ³ μ€λ₯ λ°μ μνμ μ€μΌ μ μμ΅λλ€.
λͺ¨λ² μ¬λ‘ λ° κ³ λ € μ¬ν
- μ¬λ°λ₯Έ κΈ°μ μ ν: νΉμ μλ리μ€μ μ€λ‘νλ§ λλ λλ°μ΄μ± μ€ μ΄λ€ κ²μ΄ μ΅μ μ μ루μ μΈμ§ μ μ€νκ² κ³ λ €νμμμ€.
- μ§μ° μκ° μ‘°μ : λ°μμ±κ³Ό μ±λ₯ μ¬μ΄μ μ΅μ μ κ· νμ μ°ΎκΈ° μν΄ λ€μν μ§μ° μκ° κ°μ μ€ννμμμ€.
- μ² μ ν ν μ€νΈ: μ€λ‘νλ§ λ° λλ°μ΄μ± ν¨μκ° λ€μν μλ리μ€μμ μμλλ‘ μλνλμ§ μ² μ ν ν μ€νΈνμμμ€.
- μ¬μ©μ κ²½ν κ³ λ €: μ€λ‘νλ§ λ° λλ°μ΄μ±μ ꡬνν λ μ¬μ©μ κ²½νμ μ μνμμμ€. λ무 κΈ΄ μ§μ°μ μ ν리μΌμ΄μ μ λλ¦¬κ² λκ»΄μ§κ² ν μ μμΌλ―λ‘ νΌνμμμ€.
- μ κ·Όμ±: μ€λ‘νλ§ λ° λλ°μ΄μ±μ΄ μ₯μ κ° μλ μ¬μ©μμκ² μ΄λ€ μν₯μ λ―ΈμΉ μ μλμ§ μΈμ§νμμμ€. μ ν리μΌμ΄μ μ΄ λͺ¨λ μ¬μ©μμκ² μ κ·Ό κ°λ₯νκ³ μ¬μ© κ°λ₯νλλ‘ λ³΄μ₯νμμμ€. μλ₯Ό λ€μ΄, ν€λ³΄λ μ΄λ²€νΈλ₯Ό λλ°μ΄μ±νλ κ²½μ° ν€λ³΄λλ₯Ό μ¬μ©ν μ μλ μ¬μ©μλ₯Ό μν΄ ν¨μλ₯Ό νΈλ¦¬κ±°νλ λ체 λ°©λ²μ μ 곡νλ κ²μ κ³ λ €νμμμ€.
- μ±λ₯ λͺ¨λν°λ§: λΈλΌμ°μ κ°λ°μ λꡬλ₯Ό μ¬μ©νμ¬ μ€λ‘νλ§ λ° λλ°μ΄μ± ν¨μμ μ±λ₯μ λͺ¨λν°λ§νμμμ€. μ±λ₯ λ³λͺ© νμμ μλ³νκ³ μ½λμ λ°λΌ μ΅μ ννμμμ€. νλ μ μλ(FPS) λ° CPU μ¬μ©λμ μΈ‘μ νμ¬ λ³κ²½ μ¬νμ μν₯μ μ΄ν΄νμμμ€.
- λͺ¨λ°μΌ κ³ λ € μ¬ν: λͺ¨λ°μΌ μ₯μΉλ λ°μ€ν¬ν± μ»΄ν¨ν°μ λΉν΄ 리μμ€κ° μ νμ μ λλ€. λ°λΌμ μ€λ‘νλ§ λ° λλ°μ΄μ±μ λͺ¨λ°μΌ μ ν리μΌμ΄μ μμ ν¨μ¬ λ μ€μν©λλ€. μλ΅μ±μ μ μ§νκΈ° μν΄ λͺ¨λ°μΌ μ₯μΉμμλ λ μ§§μ μ§μ° μκ°μ μ¬μ©νλ κ²μ κ³ λ €νμμμ€.
κ²°λ‘
μ€λ‘νλ§κ³Ό λλ°μ΄μ±μ μ΄λ²€νΈ μ²λ¦¬λ₯Ό μ΅μ ννκ³ μΉ μ ν리μΌμ΄μ μ±λ₯μ ν₯μμν€λ λ° νμμ μΈ κΈ°μ μ λλ€. μ΄λ²€νΈ νΈλ€λ¬ μ€ν λΉλλ₯Ό μ μ΄ν¨μΌλ‘μ¨ κ³Όλν 리μμ€ μλΉλ₯Ό λ°©μ§νκ³ , μλ² λΆνλ₯Ό μ€μ΄λ©°, λ λ°μμ μ΄κ³ μ¦κ±°μ΄ μ¬μ©μ κ²½νμ λ§λ€ μ μμ΅λλ€. μ€λ‘νλ§κ³Ό λλ°μ΄μ±μ μ°¨μ΄μ μ μ΄ν΄νκ³ μ μ νκ² μ μ©νλ κ²μ μΉ μ ν리μΌμ΄μ μ μ±λ₯κ³Ό νμ₯μ±μ ν¬κ² ν₯μμν¬ μ μμ΅λλ€.
μ¬μ© μ¬λ‘λ₯Ό μ μ€νκ² κ³ λ €νκ³ λ§€κ°λ³μλ₯Ό μ‘°μ ν¨μΌλ‘μ¨ μ΄λ¬ν κΈ°μ μ ν¨κ³Όμ μΌλ‘ νμ©νμ¬ μ μΈκ³ μ¬μ©μμκ² μνν κ²½νμ μ 곡νλ κ³ μ±λ₯μ μ¬μ©μ μΉνμ μΈ μΉ μ ν리μΌμ΄μ μ λ§λ€ μ μμ΅λλ€.
μ΄λ¬ν κΈ°μ μ μ± μκ° μκ² μ¬μ©νκ³ μ¬μ©μ κ²½ν λ° μ κ·Όμ±μ λ―ΈμΉλ μν₯μ κ³ λ €νλ κ²μ μμ§ λ§μμμ€. μ½κ°μ κ³νκ³Ό μ€νμ ν΅ν΄ μ€λ‘νλ§κ³Ό λλ°μ΄μ±μ λ§μ€ν°νκ³ JavaScript μ΄λ²€νΈ μ²λ¦¬μ μ μ¬λ ₯μ μ΅λν νμ©ν μ μμ΅λλ€.
μΆκ° νμ: Lodash λ° Underscoreμ κ°μ λΌμ΄λΈλ¬λ¦¬μμ μ 곡νλ ꡬνμ μ΄ν΄λ³΄μΈμ. μ λλ©μ΄μ κ΄λ ¨ μ€λ‘νλ§μ μν΄ requestAnimationFrameμ μ‘°μ¬ν΄ 보μΈμ. κ΅¬μ± μμ κ° ν΅μ μ μν΄ μ€λ‘νλ§/λλ°μ΄μ±κ³Ό ν¨κ» μ¬μ©μ μ§μ μ΄λ²€νΈλ₯Ό μ¬μ©νλ κ²μ κ³ λ €ν΄ λ³΄μΈμ.